package com.chad.library.adapter.base.entity

import androidx.recyclerview.widget.RecyclerView

/**
 * 一个Item由多个部分组成基础实体类
 *
 * @author Created by wanggaowan on 2022/9/7 15:47
 */
abstract class BaseMultiPartItemEntity {
    /**
     * 在[RecyclerView.Adapter]中的起始下标
     */
    var startIndex: Int = 0
        internal set

    /**
     * 获取数据总数量，一个长度对应[RecyclerView.Adapter]中一个Item
     */
    abstract fun getTotalCount(): Int

    /**
     * [RecyclerView.Adapter]下标位置是否在当前数据范围内
     *
     * @param adapterPosition [RecyclerView.Adapter]中的下标位置
     */
    fun isIn(adapterPosition: Int): Boolean {
        return adapterPosition >= startIndex && adapterPosition <= startIndex + getTotalCount()
    }

    /**
     * [RecyclerView.Adapter]下标转化为当前数据[getTotalCount]数据总量中的下标。
     * 如果[adapterPosition]不在当前数据范围，则返回[RecyclerView.NO_POSITION]
     */
    fun adapterIndexToDataIndex(adapterPosition: Int): Int {
        if (!isIn(adapterPosition)) {
            return RecyclerView.NO_POSITION
        }

        return adapterPosition - startIndex
    }

    /**
     * 获取数据类型
     *
     * @param position 在[getTotalCount]数据总量中的下标，非Adapter中的下标
     */
    abstract fun getItemType(position: Int): Int
}